package com.atguigu.gmall.product.service.impl;

import com.atguigu.gmall.product.service.TestLockService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

/**
 * @author Administrator
 * @create 2020-05-17 11:59
 */
@Service
public class TestLockServiceImpl implements TestLockService {
    @Autowired
    private RedisTemplate redisTemplate;

    @Override
    public synchronized void testLock() {
        Integer num = (Integer) redisTemplate.opsForValue().get("num");
        redisTemplate.opsForValue().set("num",++num);
        /*
        * 不加锁迸发后281
        * （理想的）每次只迸发100个，每个请求拿到的都是0 改完后都是1  那么5000个请求最终num为50
        * synchronized加锁后迸发  5281
        * 请求是一个一个执行完的
        *
        *
        *当集群的多个微服务启动时： 负债均衡转发迸发的请求，是多个线程对这个key的修改，不能保证最后是5000
        * */
    }
}
